package com.gjy.redis.util.jedis;

import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import javax.annotation.Resource;
import java.util.Set;

/**
 * @author gjy
 * @version 1.0
 * @since 2025-09-30 09:18:17
 */
@Component
public class SetRedisUtil {

    @Resource
    private JedisPool jedisPool;

    /**
     * 添加元素到集合
     */
    public Long sadd(String key, String... members) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.sadd(key, members);
        }
    }

    /**
     * 移除集合中的元素
     */
    public Long srem(String key, String... members) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.srem(key, members);
        }
    }

    /**
     * 获取集合所有元素
     */
    public Set<String> smembers(String key) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.smembers(key);
        }
    }

    /**
     * 判断元素是否在集合中
     */
    public Boolean sismember(String key, String member) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.sismember(key, member);
        }
    }

    /**
     * 获取集合元素数量
     */
    public Long scard(String key) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.scard(key);
        }
    }

    /**
     * 随机获取集合中的一个元素
     */
    public String srandmember(String key) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.srandmember(key);
        }
    }

    /**
     * 随机弹出集合中的一个元素
     */
    public String spop(String key) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.spop(key);
        }
    }

    /**
     * 求多个集合的差集
     */
    public Set<String> sdiff(String... keys) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.sdiff(keys);
        }
    }

    /**
     * 求多个集合的交集
     */
    public Set<String> sinter(String... keys) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.sinter(keys);
        }
    }

    /**
     * 求多个集合的并集
     */
    public Set<String> sunion(String... keys) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.sunion(keys);
        }
    }

}

